/**
 * 后台脚本：管理扩展生命周期和数据存储
 * 处理扩展与内容脚本之间的通信
 * 存储提取的链接和用户设置
 */
import { NavigationLink } from './utils/linkExtractor';

// 存储的链接数据
interface StoredData {
  links: NavigationLink[];
  lastUpdated: number;
  pageUrl: string;
}

export default defineBackground(() => {
  console.log('后台脚本已启动', { id: browser.runtime.id });
  
  // 处理来自内容脚本和弹出窗口的消息
  browser.runtime.onMessage.addListener(async (message, sender, sendResponse) => {
    console.log(`[PID:${performance.now().toFixed(0)}][TID:${Date.now() % 10000}][background.ts] 收到消息`, message);
    
    switch (message.action) {
      // 存储提取的链接
      case 'storeLinks':
        if (message.links && Array.isArray(message.links)) {
          await storeLinks(message.links, message.pageUrl || '');
          sendResponse({ success: true });
        } else {
          sendResponse({ success: false, error: '无效的链接数据' });
        }
        break;
        
      // 获取存储的链接
      case 'getLinks':
        const data = await getStoredLinks();
        sendResponse({ success: true, data });
        break;
        
      // 清除存储的链接
      case 'clearLinks':
        await clearStoredLinks();
        sendResponse({ success: true });
        break;
        
      // 选择元素提取的链接
      case 'selectedElementLinks':
        if (sender.tab && sender.tab.id) {
          // 将选择的链接信息通知给弹出窗口
          await browser.runtime.sendMessage({
            action: 'updateSelectedLinks',
            links: message.links,
            pageUrl: sender.tab.url || ''
          }).catch(error => {
            console.log(`[PID:${performance.now().toFixed(0)}][TID:${Date.now() % 10000}][background.ts] 发送消息失败`, error);
          });
          sendResponse({ success: true });
        }
        break;
        
      // 页面面板相关
      case 'panelShown':
        console.log(`[PID:${performance.now().toFixed(0)}][TID:${Date.now() % 10000}][background.ts] 页面面板已显示`, message.data);
        sendResponse({ success: true });
        break;

      case 'panelClosed':
        console.log(`[PID:${performance.now().toFixed(0)}][TID:${Date.now() % 10000}][background.ts] 页面面板已关闭`);
        sendResponse({ success: true });
        break;
        
      default:
        console.log(`[PID:${performance.now().toFixed(0)}][TID:${Date.now() % 10000}][background.ts] 未知消息动作`, message.action);
        sendResponse({ success: false, error: '未知操作' });
    }
    
    return true; // 保持消息通道开放
  });
  
  // 当扩展图标被点击时，切换弹出窗口
  browser.action.onClicked.addListener((tab) => {
    console.log(`[PID:${performance.now().toFixed(0)}][TID:${Date.now() % 10000}][background.ts] 扩展图标被点击`);
  });
});

/**
 * 存储提取的链接
 * @param links 提取的链接数组
 * @param pageUrl 页面URL
 */
async function storeLinks(links: NavigationLink[], pageUrl: string): Promise<void> {
  const data: StoredData = {
    links,
    lastUpdated: Date.now(),
    pageUrl
  };
  
  await browser.storage.local.set({ navLinks: data });
  console.log(`[PID:${performance.now().toFixed(0)}][TID:${Date.now() % 10000}][background.ts] 存储了 ${links.length} 个链接`);
}

/**
 * 获取存储的链接
 * @returns 存储的链接数据
 */
async function getStoredLinks(): Promise<StoredData | null> {
  const result = await browser.storage.local.get('navLinks');
  return result.navLinks || null;
}

/**
 * 清除存储的链接
 */
async function clearStoredLinks(): Promise<void> {
  await browser.storage.local.remove('navLinks');
  console.log(`[PID:${performance.now().toFixed(0)}][TID:${Date.now() % 10000}][background.ts] 清除了存储的链接`);
}
